package com.onerway.entity.notify;

import com.onerway.common.Signable;
import com.onerway.enums.NotifyTypeEnum;
import com.onerway.enums.TxnTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class NotifyReq implements Signable {

    /**
     * 通知类型。请参阅
     */
    private NotifyTypeEnum notifyType;
    /**
     * 交易类型。请参阅 当 notifyType 为 TXN 时返回，用于区分支付和退款
     */
    private TxnTypeEnum txnType;
    /**
     * Onerway 创建的交易订单号，对应商户订单号
     */
    private String transactionId;
    /**
     * 来源于 Onerway 的原始交易订单号。在退款等反向交易的通知中返回对应的正向交易的Onerway交易订单号
     */
    private String originTransactionId;
    /**
     * 商户创建的商户交易订单号，不同的订单号视为不同的交易
     */
    private String merchantTxnId;
    /**
     * 商户原交易订单号，在退款等反向交易的通知中返回对应的正向交易的商户交易订单号
     */
    private String originMerchantTxnId;
    /**
     * 商户号。 商户注册时，OnerWay 会为商户创建商户号
     */
    private String merchantNo;
    /**
     * 接口响应时间，格式为yyyy-MM-dd HH:mm:ss
     */
    private String responseTime;
    /**
     * 交易完成时间，格式为yyyy-MM-dd HH:mm:ss
     */
    private String txnTime;
    /**
     * 交易完成时区，例如：+08:00
     */
    private String txnTimeZone;
    /**
     * 交易订单金额
     */
    private String orderAmount;
    /**
     * 交易订单的货币。 请参阅 ISO 4217 货币代码
     */
    private String orderCurrency;
    /**
     * 订单金额转换成结算币种后的金额
     */
    private String txnAmount;
    /**
     * 结算币种。 请参阅 ISO 4217 货币代码
     */
    private String txnCurrency;
    /**
     * 汇率（txnAmount = orderAmount * settleRate）。
     */
    private String settleRate;
    /**
     * 可报关金额
     */
    private String customsDeclarationAmount;
    /**
     * 可用于报关的金额对应币种。请参阅 ISO 4217 货币代码
     */
    private String customsDeclarationCurrency;
    /**
     * 具体支付方式，包括卡和本地支付 类型
     */
    private String paymentMethod;
    /**
     * 钱包的品牌名称
     */
    private String walletTypeName;
    /**
     * 交易处理结果。 枚举如下： S - 交易成功/取消交易成功 F - 交易失败/审批不通过/取消交易失败
     */
    private String status;
    /**
     * 交易失败的原因
     */
    private String reason;
    /**
     * 分期付款期数
     */
    private String periodValue;
    /**
     * 订阅合同id，在订阅首购时会返回
     */
    private String contractId;
    /**
     * token id，在订阅首购、协议代扣申请 token 时会返回
     */
    private String tokenId;
    /**
     * token 过期时间，在协议代扣申请token时会返回
     */
    private String tokenExpireTime;
    /**
     * 责任转移
     */
    private String eci;
    /**
     * 发生拒付的日期，格式为yyyy-MM-dd
     */
    private String chargebackDate;
    /**
     * Onerway 接收拒付交易的时间，格式为yyyy-MM-dd HH:mm:ss
     */
    private String importTime;
    /**
     * 申诉资料提交截止时间，格式为yyyy-MM-dd HH:mm:ss
     */
    private String appealDueTime;
    /**
     * 拒付金额
     */
    private String chargebackAmount;
    /**
     * 拒付金额对应币种。 请参阅 ISO 4217 货币代码
     */
    private String chargebackCurrency;
    /**
     * 拒付状态。请参阅
     */
    private String chargebackStatus;
    /**
     * 拒付 ARN
     */
    private String chargebackArn;
    /**
     * 拒付代码
     */
    private String chargebackCode;
    /**
     * 拒付原因
     */
    private String chargebackReason;
    /**
     * 签名字符串，请参阅Sign接口
     */
    private String sign;
}
